
//2875.无限数组的最短子数组
class Solution {
    public:
        int minSizeSubarray(vector<int>& nums, int target) {
            //通过滑动窗口实现
            //先判断最少需要多少个nums
            long long sum=0,n=nums.size();
            for(auto e:nums) sum+=e;
    
            int num=target/sum;   //得到需要的完整nums个数
            int more=target%sum;   //得到需要部分nums的和
            
            int ret=INT_MAX,left=0;
            int tmp=0;
            for(int right=0;right<n*2;right++)   //通过滑动窗口计算多余的部分需要的最小长度
            {
                tmp+=nums[right%n];
                while(tmp>more)
                {
                    tmp-=nums[(left++)%n];
                }
                if(tmp==more) ret=min(ret,right-left+1);
            }
    
            return ret==INT_MAX?-1:ret+num*n;
        }
    };